线段树、树状数组、ST表、分块、堆……等数据结构,但是复杂度都至少是$nlogn$的,于是我写了个尺取法+单调队列的方法,时间复杂度$O(n)$
单调队列维护区间中$si$~$sj$的最大值,这里运用到了一点贪心策略,如果两个区间有包含关系,那么大的区间最大值一定$\geqslant$小的区间最大值,所以对于每一个$i$,我们去前面找第一个$head$,使$sum_{i,j}\geqslant m$
如图所示,我们选择$5$作为$head$而不是前面的$11$、$2$、$3$、$4$,是因为区间更长,就像在一个数列中加入了另一些数,另一些数中可能有大于原数列的最大值,因为要求最大值的最小值,故不是最优。
1 |
|